package br.mg.bhe.ftpobre.command.facade;

import br.mg.bhe.ftpobre.ConnectionData;
import br.mg.bhe.ftpobre.Main;
import java.util.logging.Level;
import java.util.logging.Logger;

import br.mg.bhe.ftpobre.command.CommandFactory;
import br.mg.bhe.ftpobre.command.ConnectionCommand;
import br.mg.bhe.ftpobre.command.DisconnectionCommand;
import br.mg.bhe.ftpobre.command.DownloadCommand;
import br.mg.bhe.ftpobre.command.UploadCommand;
import br.mg.bhe.ftpobre.gui.MainFrame;
import br.mg.bhe.ftpobre.gui.connection.ConnectionFrame;
import br.mg.bhe.ftpobre.util.LogUtil;
import br.mg.bhe.ftpobre.util.MensagensUtil;

/**
 * 
 * @author Aureliano
 */
public final class ServerFacade {

	private static final Logger logger = LogUtil.getLogger(ServerFacade.class);
	
	private ServerFacade() {
		super();
	}
	
	public static void connect() {
            ConnectionData c = Main.getConnectionData();
            if ((c != null) && (c.getUser() != null) &&
                    (c.getPassword() != null) && (c.getHost() != null) &&
                    (c.getPort() != null)) {
                
                try {
                    CommandFactory.command(ConnectionCommand.class).execute();
                    MainFrame.getInstance().configureLabelOperationMode(true);
                    MainFrame.getInstance().configureComponentState(true);
                    MainFrame.getInstance().activeComponentState();
                    Main.getConnectionData().setWorkingOnline(true);
                } catch (Exception ex) {
                    String message = "Não foi possível abrir conexão com o servidor de FTP.\nDetalhe: " + ex.getMessage();
                    MensagensUtil.showErrorMessage("Erro de conexão", message);
                    logger.log(Level.SEVERE, ex.getMessage(), ex);
		}
            } else {
                ConnectionFrame frame = new ConnectionFrame(MainFrame.getInstance(), true, false);
                frame.setVisible(true);
            }
	}
	
	public static void disconnect() {
            try {
                CommandFactory.command(DisconnectionCommand.class).execute();
                MainFrame.getInstance().configureLabelOperationMode(false);
                MainFrame.getInstance().configureComponentState(false);
                Main.getConnectionData().setWorkingOnline(false);
            } catch (Exception ex) {
                String message = "Não foi possível encerrar conexão com o servidor FTP. Detalhe: ";
                MensagensUtil.showErrorMessage("Erro de conexão", message);
                logger.log(Level.SEVERE, ex.getMessage(), ex);
            }
	}
	
	public static void upload() {
		try {
        	CommandFactory.command(UploadCommand.class).execute();
        } catch (Exception ex) {
        	MensagensUtil.showErrorMessage("Erro upload",
        			"Não foi possível enviar arquivo. Detalhe: " + ex.getMessage());
        	logger.log(Level.SEVERE, ex.getMessage(), ex);
        }
	}
	
	public static void download() {
		try {
        	CommandFactory.command(DownloadCommand.class).execute();
        } catch (Exception ex) {
        	MensagensUtil.showErrorMessage("Erro download",
        			"Não foi possível baixar arquivo. Detalhe: " + ex.getMessage());
        	logger.log(Level.SEVERE, ex.getMessage(), ex);
        }
	}
}